package org.foreveross.jbpm.application;

import java.util.List;
import org.foreveross.jbpm.application.vo.HistoryLogVo;
import org.foreveross.jbpm.application.vo.JBPMNode;
import org.foreveross.jbpm.application.vo.ProcessInstanceVO;
import org.foreveross.jbpm.application.vo.ProcessVO;
import org.foreveross.jbpm.application.vo.TaskVO;
import javax.jws.*;

/**
 * 流程接口
 * 
 * @author lingen
 * 
 */
@WebService
public interface JBPMApplication {
	
	/**
	 * 启动一个流程
	 * @param processName 流程的名称
	 * @param params  流程的参数，以XML形式传入,以便兼容各种语言
	 * 如
	 * <params>
	 *    <creater>lingen</creater>
	 *    <isOpen>true</isOpen>
	 * </params>
	 * @return
	 */
	public long startProcess(String processName,String params);

	/**
	 * 查询指定用户的待办任务
	 * 
	 * @return
	 */
	public List<TaskVO> queryTodoList(String user);
	
	/**
	 * 完成一个工作
	 * @param user 完成的用户
	 * @param taskId 任务ID
	 * @param params 流程级参数
	 * @param data 节点级参数
	 * 流程级参数与节点级参数均以XML形式传入，如
	 *  <params>
	 *    <creater>lingen</creater>
	 *    <isOpen>true</isOpen>
	 * </params>
	 */
	public boolean completeTask(long processId,long taskId,String user,String params,String data);
	
	/**
	 * 查询一个用户的已完成任务
	 * @param user
	 * @return
	 */
	public List<TaskVO> queryDoenTask(String user);
	
	/**
	 * 查询一个流程的历史记录
	 * @param processId
	 * @return
	 */
	public List<HistoryLogVo> queryHistoryLog(long processId);
	
	/**
	 * 返回错误的流程列表
	 * @return
	 */
	public List<TaskVO> queryErrorList();
	
	/**
	 * 流程节点的人工转移
	 * @param processInstanceId
	 * @param nodeId
	 */
	public void assignToNode(long processInstanceId,long nodeId);
	
	/**
	 * 查询一个流程下的所有流程实例信息
	 * @param processId
	 * @return
	 */
	public List<ProcessInstanceVO> queryAllActiveProcess(String processId);
	
	/**
	 * 查询一个流程的实例信息
	 * @param processInstaceId
	 * @return
	 */
	public ProcessInstanceVO getProcessInstance(long processInstaceId);
	
	/**
	 * 流程委托
	 * @param taskId
	 * @param userId
	 * @param targetUserId
	 */
	public void delegate(long taskId,String userId,String targetUserId);
	
	/**
	 * 返回一个流程图片
	 * @param instanceId
	 * @return
	 */
	public byte[] getPorcessImageStream(long instanceId);
	
	/**
	 * 修复错误流程
	 * @param taskId
	 */
	public void repairTask(long taskId);
	
	/**
	 * 新增一个流程
	 * @param processId
	 * @param version
	 * @param data
	 * @param png
	 */
	public void addProcess(String processId,int version,String data,byte[] png);
	
	/**
	 * 返回所有流程定义
	 * @return
	 */
	public List<ProcessVO> getProcesses();
	
	/**
	 * 移除一个流程
	 * @param processInstanceId
	 */
	public void removeProcessInstance(long processInstanceId);
	
	public List<JBPMNode> getProcessNodes(String processId);

}
